package com.warm.base.design.s_adapter;


/**
 * @Date: 2019/11/21 11:53
 * @Author: LChuang
 * @Description: 适配器模式(结构型) : 对象适配器、类适配器
 *
 *      将一个类的接口转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
 */
public class Client {

    /**
     * 目标（Target）接口：当前系统业务所期待的接口，它可以是抽象类或接口。
     * 适配者（Adaptee）类：它是被访问和适配的现存组件库中的组件接口。
     * 适配器（Adapter）类：它是一个转换器，通过继承或引用适配者的对象，把适配者接口转换成目标接口，让客户按目标接口的格式访问适配者
     */
    public static void main(String[] args) {
        // 1. ObjectAdapter : {Adaptee --> ObjectAdapter(Adaptee) --> ObjectTarget}
        ITarget objectTarget = new ObjectAdapter(new Adaptee());
        // in fact invoke the Adaptee's adaptee()
        objectTarget.target();

        // 2. ClassAdapter : {Adaptee --> ClassAdapter extends Adaptee implements ITarget --> ITarget}
        ITarget iTarget = new ClassAdapter();
        iTarget.target();
    }
}
